static 您所在的位置:网站首页 Static analysis in JavaScript 11 tools to help you catch errors static

static

2024-05-20 23:26| 来源: 网络整理| 查看: 265

このページでは、静的メソッド、静的アクセサ、静的フィールドを含む、クラスのパブリック静的プロパティを紹介します。

プライベートな静的機能については、プライベートプロパティを参照してください。 インスタンスの機能については、メソッド定義、ゲッター、セッター、パブリッククラスフィールドを参照してください。

パブリック静的機能は、static キーワードを使用して宣言します。これらはクラス評価時に、 [[DefineOwnProperty]] の意味づけ(これは本質的に Object.defineProperty() です)を使用して、クラスのコンストラクターに追加されます。これらは、コンストラクターから再びアクセスします。

静的メソッドの多くは、インスタンスを作成したり複製したりするなどの、ユーティリティ関数です。パブリック静的フィールドは、作成するすべてのクラスインスタンスではなく、クラスごとに一つだけフィールドを存在させたい場合に有益です。これは、キャッシュや固定の構成値、 あるいはインスタンスをまたがって複製する必要のないデータなどに有益です。

静的フィールド名は計算できます。計算式の this 値はクラス定義の周囲の this であり、クラス名を参照すると、クラスがまだ初期化されていないため ReferenceError になります。この式では await と yield は期待どおりに動作します。

静的フィールドは初期化子を持つことができます。初期化子を持たない静的フィールドは undefined に初期化されます。パブリック静的フィールドはサブクラスでは再初期化されませんが、プロトタイプチェーン経由でアクセスすることができます。

jsclass ClassWithStaticField { static staticField; static staticFieldWithInitializer = "静的フィールド"; } class SubclassWithStaticField extends ClassWithStaticField { static subStaticField = "サブクラスのフィールド"; } console.log(Object.hasOwn(ClassWithStaticField, "staticField")); // true console.log(ClassWithStaticField.staticField); // undefined console.log(ClassWithStaticField.staticFieldWithInitializer); // "静的フィールド" console.log(SubclassWithStaticField.staticFieldWithInitializer); // "静的フィールド" console.log(SubclassWithStaticField.subStaticField); // "サブクラスのフィールド"

フィールド初期化子では、 this は現在のクラス(その名前からもアクセスすることができます)を参照し、 super は基底クラスのコンストラクターを参照します。

jsclass ClassWithStaticField { static baseStaticField = "基底クラスの静的フィールド"; static anotherBaseStaticField = this.baseStaticField; static baseStaticMethod() { return "基底クラスの静的フィールドの出力"; } } class SubClassWithStaticField extends ClassWithStaticField { static subStaticField = super.baseStaticMethod(); } console.log(ClassWithStaticField.anotherBaseStaticField); // "基底クラスの静的フィールド" console.log(SubClassWithStaticField.subStaticField); // "基底クラスの静的フィールドの"

式は同期的に評価されます。初期化子式で(await や yield)を使用することはできません。(初期化子式は暗黙に関数に包まれていると考えてください)。

静的フィールド初期化子と静的初期化ブロックは、 1 つずつ評価されます。フィールド初期化子は、それより上のフィールド値を参照することはできますが、それより下のフィールド値を参照することはできません。静的メソッドはすべて事前に追加され、アクセスすることができますが、初期化されるフィールドより下のフィールドを参照している場合、呼び出すと期待した動作をしないことがあります。

メモ: これはプライベート静的フィールドではより重要です。初期化されていないプライベートフィールドにアクセスすると、たとえそのプライベートフィールドが下で宣言されていたとしても、 TypeError が発生するからです。(プライベートフィールドが宣言されていない場合は、早期に SyntaxError となります。)



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有